package cn.bearspark.api.service.main;

import cn.bearspark.api.vo.main.happening.*;
import cn.bearspark.api.vo.main.user.UserSlimVO;
import cn.bearspark.common.dto.Page;

/**
 * 动态模块相关请求的接口
 *
 * @author f
 */
public interface HappeningService {

    /**
     * 发布动态
     *
     * @param publishHappeningReqVO 发布动态的请求对象
     */
    void publish(PublishHappeningReqVO publishHappeningReqVO);

    /**
     * 获取准备写动态的信息
     *
     * @return 写动态需要的信息
     */
    PrepareRespVO prepare();

    /**
     * 分页获取动态的信息
     *
     * @param pageNum        动态的页数
     * @param pageSize       动态的条数
     * @param selectedUserId 被查询动态的用户 id，可以为 null，表示查询全部动态信息
     * @return 动态的信息
     */
    Page<HappeningVO> pageQuery(int pageNum, int pageSize, Long selectedUserId);

    /**
     * 获取动态详情
     *
     * @param happeningId 待获取详情的动态 id
     * @return 动态详情
     */
    HappeningDetailVO detail(long happeningId);

    /**
     * 删除动态
     *
     * @param happeningId 待删除的动态
     */
    void delete(Long happeningId);

    /**
     * 修改动态
     *
     * @param modifyHappeningVO 修改动态的请求对象
     */
    void modify(ModifyHappeningVO modifyHappeningVO);

    /**
     * 获取关注者列表
     *
     * @return 关注者列表
     */
    FollowerListVO followerList();

    /**
     * 获取表情包列表
     *
     * @return 表情包列表
     */
    EmojiListVO emojiList();

    /**
     * 分页查询点赞用户列表
     *
     * @param pageNum     页数
     * @param pageSize    每页的条数
     * @param happeningId 动态的 id
     * @return 点赞用户列表
     */
    Page<UserSlimVO> pageQueryLikedList(Integer pageNum, Integer pageSize, Long happeningId);

    /**
     * 分页查询转发用户列表
     *
     * @param pageNum     页数
     * @param pageSize    每页的条数
     * @param happeningId 动态的 id
     * @return 转发用户列表
     */
    Page<UserSlimVO> pageQueryForwardedList(Integer pageNum, Integer pageSize, Long happeningId);
}
